package com.xhj.mybatis.executor.keygen;

import com.xhj.mybatis.executor.Executor;
import com.xhj.mybatis.mapping.MappedStatement;

import java.sql.Statement;

/**
 * KeyGenerator
 *
 * @author XJks
 * @description 主键生成器接口，用于在插入数据库时生成主键
 */
public interface KeyGenerator {

    /**
     * 在执行插入语句之前处理主键生成逻辑
     *
     * @param executor  执行器对象，负责执行SQL语句
     * @param ms        映射的SQL语句对象，包含SQL和相关配置
     * @param stmt      JDBC的Statement对象，用于执行SQL
     * @param parameter 插入语句的参数对象
     */
    void processBefore(Executor executor, MappedStatement ms, Statement stmt, Object parameter);

    /**
     * 在执行插入语句之后处理主键生成逻辑
     *
     * @param executor  执行器对象
     * @param ms        映射的SQL语句对象
     * @param stmt      JDBC的Statement对象
     * @param parameter 插入语句的参数对象
     */
    void processAfter(Executor executor, MappedStatement ms, Statement stmt, Object parameter);

}
